package com.gper.edu.implicts

/**
 * 隐式转换：
 *  1. 需求: 指定某些数据类型的相互转换
 *  2. 隐式函数：以implicit关键字声明的带有单个参数的函数
 *              这种函数将会自动应用，将值自动地由一种类型转成另一种类型
 *  总结：
 *    1. 隐式函数，函数名可以任意，即隐式转换与函数名无关，只与函数签名有关(参数类型和返回值类型)
 *    2. 隐式函数可以有多个，但是需要保证在当前环境下，只有一个隐式函数能被识别(同一参数类型和返回值类型的函数有且只能有一个)
 */
object ImplicitDemo {

  def main(args: Array[String]): Unit = {
    /**
     * 编写一个隐式函数将Double -> Int的转换
     * 隐式函数应当在作用域才能生效
     * @param double
     * @return
     */
    implicit def f1(double: Double):Int={//在底层会生成f1$1
      double.toInt
    }

    /**
     * 将高精度 -> 低精度
     */
    val number:Int = 3.5  //在底层编译成f1$1(3.5)
    println("number = "+number)
  }
}
